Принципы ООП: практика
Это полностью практический урок. В нём вас ждёт шесть тренажёрных задач, которые помогут усвоить теорию о принципах ООП. Удачи!
5.
Перед вами программа, которая умеет высчитывать расстояние от одной точки на карте до другой.
В коде описан класс
Point (точка на карте), у него есть свойства — широта и долгота, и метод distance(self, other) — это расстояние между двумя точками в километрах (параметр other должен получить другой объект Point).Создайте два класса-наследника класса
Point:City(Point, name, population)описывает город, в конструктор передаются координаты города (объект классаPoint), его название и численность населения;Mountain(Point, name, height)описывает гору, в конструктор передаются координаты горы (объект классаPoint), её название и высота в метрах.
Ваша задача — вывести на экран расстояние от Москвы до Эвереста.
Подсказка
- В конструкторе класса
Cityприсвойте значения параметров свойствамself.nameиself.population. Затем вызовите конструктор родительского класса с аргументами «широта» и «долгота»:super().__init__(latitude, longitude) - Конструктор класса
Mountainдолжен принять на вход широту, долготу, название горы и её высоту:def __init__(self, latitude, longitude, name, height): - Опишите метод
show()в классеMountain.
Код
xxxxxxxxxx67
1
23
1
# импортируем функции из библиотеки math для рассчёта расстояния2
from math import radians, sin, cos, acos3
4
5
class Point:6
def __init__(self, latitude, longitude):7
self.latitude = radians(latitude)8
self.longitude = radians(longitude)9
10
# считаем расстояние между двумя точками в км11
def distance(self, other):12
cos_d = sin(self.latitude) * sin(other.latitude) + cos(self.latitude) * cos(other.latitude) * cos(13
self.longitude - other.longitude)14
15
return 6371 * acos(cos_d)16
17
18
class City(Point):19
def __init__(self, latitude, longitude, name, population):20
# допишите код: сохраните свойства родителя21
# и добавьте свойства name и population22
23
def show(self):24
print(f"Город {self.name}, население {self.population} чел.")25
26
27
class Mountain(Point):28
# допишите код: напишите конструктор, в нём сохраните свойства родителя29
# и добавьте свойства name и height30
31
# Создайте метод show(self):32
# информацию о горе нужно вывести в формате:33
# "Высота горы <название> - <высота> м."34
35
36
# эта функция печатает расстояние37
# между двумя любыми наследниками класса Point38
def print_how_far(geo_object_1, geo_object_2):39
print(f'От точки «{geo_object_1.name}» до точки «{geo_object_2.name}» — {geo_object_1.distance(geo_object_2)} км.')40
41
42
# основной код43
moscow = City(55.7522200, 37.6155600, 'Москва', 12615882)44
everest = Mountain(27.98791, 86.92529, 'Эверест', 8848)45
chelyabinsk = City(55.154, 61.4291, 'Челябинск', 1200703)46
47
moscow.show()48
everest.show()49
print_how_far(moscow, everest)50
print_how_far(moscow, chelyabinsk)